
//	客户端
#pragma once
#include "NetworkReactor.h"

//	自定义网络事件处理类
class CNetworkDataManage
	: public CNetworkIO
{
	//	函数部分
public:
	CNetworkDataManage()
	{
	}

	CNetworkDataManage(CNetworkDataManage &right)
		: CNetworkIO(right)
	{
	}

	virtual ~CNetworkDataManage()
	{
	}

protected:
	//	读取网络上的数据(回调)
	bool read(NETWORK_DATA * network_data)
	{
		if (network_data == NULL || network_data->_buffer == NULL)
			return false;

		//	处理接收到的数据
		printf("type=%ld len=%ld\n", network_data->_type,network_data->_len);
		
		return true;
	}
	
	//	网络事件(回调)
	//	事件类型
	bool event(short events)
	{
#if _DEBUG
		printf("事件ID:%d\n", events);
#endif
		return true;
	}

private:
	

	//	数据部分
public:
protected:
private:
};

const char *IP="192.168.0.1";
const unsigned short PORT = 54000;
int _tmain(int argc, _TCHAR* argv[])
{
	//	启动反应器
	if (!NetRObj->Start())
	{
		printf("反应器启动失败!\n");
		return 0;
	}
	
	//	添加网络事件
	CNetworkDataManage network_init;
	if (!NetRObj->AddConnectEvent(IP, PORT, &network_init))
	{
		printf("添加网络事件失败!\n");
		//	关闭反应器
		NetRObj->Stop();
		return 0;
	}	
	Sleep(1000);
	
	NETWORK_INFO network_info;
	network_info._ip = IP;
	network_info._port = PORT;
	network_info._family = AF_INET;

	CNetworkIO *network_io = NULL;
	//	获取引用
	network_io = NetRObj->GetNetworkIORef(network_info);
	if (network_io != NULL && !network_io->IsOff())
	{
		unsigned char str[] = "测试!";
		NETWORK_DATA network_data;
		network_data._len = sizeof(str);
		network_data._buffer = str;
		
		//	发送数据
		network_io->write(network_data);
	}
	//	释放引用
	NetRObj->PutNetworkIORef(network_info);

	//	删除网络事件
	NetRObj->DelConnectEvent(network_info._ip, network_info._port);
	
	
	//	关闭反应器
	NetRObj->Stop();
	
	return 1;
}